home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 3 / CD ACTUAL 3.iso / linux / incoming / jstools-.6v3 / jstools- / jstools-tk3.6v3.0 / lib / jedit_ui.tcl < prev    next >
Encoding:
Text File  |  1995-03-14  |  6.8 KB  |  249 lines

  1. # jedit_ui.tcl - user interface for jedit
  2. # Copyright 1992-1994 by Jay Sekora.  All rights reserved, except 
  3. # that this file may be freely redistributed in whole or in part 
  4. # for non-profit, noncommercial use.
  5.  
  6. ######################################################################
  7. # create main window
  8. ######################################################################
  9.  
  10. proc jedit:mkwindow { window } {
  11.   j:debug
  12.   global argv0 MODE
  13.   
  14.   set prefix [jedit:top_to_prefix $window]
  15.   
  16.   set menu $prefix.menu
  17.   set main $prefix.main
  18.   
  19.   frame $menu -borderwidth 2 -relief raised
  20.   pack $menu -fill x
  21.   
  22. # jedit:mkmenus ...        ;# done by jedit:apply_mode
  23. # jedit:mkbuttons ...        ;# done by jedit:apply_mode
  24.   jedit:mkmain $main
  25.   pack $main -expand yes -fill both
  26.   
  27.   if {[winfo class $window] == "Toplevel"} {
  28.     wm title $window "No file"
  29.     wm iconname $window "No file"
  30.   }
  31. }
  32.  
  33. ######################################################################
  34. # create text window with scrollbar
  35. ######################################################################
  36.  
  37. proc jedit:mkmain { w } {
  38.   j:debug
  39.   global J_PREFS
  40.   if {[lsearch [array names J_PREFS] {scrollbarside}] == -1} {
  41.     set J_PREFS(scrollbarside) right ;# make sure it's defined
  42.   }
  43.   
  44.   frame $w
  45.   
  46.   frame $w.status
  47.   label $w.status.name -relief flat -text {(No file yet)}
  48.   label $w.status.mode -relief flat -text "(unspecified)"
  49.   scrollbar $w.s -relief flat -command "$w.t yview"
  50.   # text widget is configured near end, after user's config file is read
  51.   text $w.t -yscroll "$w.s set" -setgrid true
  52.   
  53.   pack $w.status.name -in $w.status -side left -fill x
  54.   pack $w.status.mode -in $w.status -side right -fill x
  55.   pack $w.status [j:rule $w] -in $w -side top -fill x
  56.   pack $w.s [j:rule $w] -in $w -side $J_PREFS(scrollbarside) -fill y
  57.   pack $w.t -in $w -side $J_PREFS(scrollbarside) -expand yes -fill both
  58.   
  59.   focus $w.t
  60.   catch {focus default $w.t}        ;# caught for Tk 4.0
  61.   tk_bindForTraversal $w.t
  62.   
  63.   return $w
  64. }
  65.  
  66. ######################################################################
  67. # create button bar
  68. ######################################################################
  69.  
  70. proc jedit:mkbuttonbar { w t } {
  71.   j:debug
  72.   if [winfo exists $w] {
  73.     destroy $w
  74.   }
  75.   
  76.   frame $w
  77.   
  78.   set mode [jedit:get_mode $t]
  79.   
  80.   if {"x[info procs mode:${mode}:mkbuttons]" != "x"} {
  81.     mode:${mode}:mkbuttons $w.b $t
  82.   } else {
  83.     j:buttonbar $w.b -pady 2 -buttons [format {
  84.       {done Done {jedit:cmd:done %s}}
  85.       {save Save {jedit:cmd:save %s}}
  86.       {load Load {jedit:cmd:load %s}}
  87.       {print Print {jedit:cmd:print %s}}
  88.     } $t $t $t $t]
  89.   }
  90.   pack $w.b [j:rule $w] -in $w -side top -fill x
  91.   return $w
  92. }
  93.  
  94. ######################################################################
  95. # set the label at the top of the window to current mode and filename
  96. ######################################################################
  97.  
  98. proc jedit:set_label { window {title USE_FILENAME} } {
  99.   j:debug
  100.   jedit:set_filename_label $window $title
  101.   jedit:set_mode_label $window [jedit:get_mode $window]
  102. }
  103.  
  104. ######################################################################
  105. # set the label at the top of the window to current filename
  106. ######################################################################
  107.  
  108. proc jedit:set_filename_label { window {title USE_FILENAME} } {
  109.   set file_label [jedit:top_to_prefix $window].main.status.name
  110.   
  111.   set filename [jedit:get_filename $window]
  112.   if {"x$filename" == "x"} {
  113.     set filename "No file"
  114.   }
  115.   
  116.   if {$title == "USE_FILENAME"} then {set title [file tail $filename]}
  117.   if {$title == "FULL_FILENAME"} then {set title $filename}
  118.   
  119.   if [winfo exists $file_label] {
  120.     $file_label configure -text $title
  121.   }
  122.   
  123.   if {[winfo class $window] == "Toplevel"} {
  124.     wm title $window $title
  125.     wm iconname $window $title
  126.   }
  127. }
  128.  
  129. ######################################################################
  130. # set the label at the top of the window to current mode
  131. ######################################################################
  132.  
  133. proc jedit:set_mode_label { window {mode USE_MODE} } {
  134.   if {$mode == "USE_MODE"} then {set mode [jedit:get_mode $window]}
  135.   
  136.   set mode_label [jedit:top_to_prefix $window].main.status.mode
  137.   if [winfo exists $mode_label] {
  138.     $mode_label configure -text [jedit:get_mode $window]
  139.   }
  140. }
  141.  
  142. ######################################################################
  143. # position insert comfortably
  144. ######################################################################
  145.  
  146. proc jedit:yview_insert {t} {
  147.   set sb [jedit:text_to_scrollbar $t]
  148.   set insertline [lindex [split [$t index insert] .] 0]
  149.   $t yview -pickplace {insert -5 lines}
  150.   set lastline [lindex [$sb get] 3]        ;# last visible line in $t
  151.   if {$lastline >= $insertline} {
  152.     $t yview -pickplace insert
  153.   }
  154. }
  155.  
  156.  
  157. ######################################################################
  158. # set text for current preferences
  159. ######################################################################
  160.  
  161. proc jedit:configure_text { t } {
  162.   global JEDIT_MODEPREFS JEDIT_PREFS
  163.   
  164.   set mode [jedit:get_mode $t]
  165.   
  166.   catch {$t configure \
  167.     -background $JEDIT_PREFS(textbg) \
  168.     -foreground $JEDIT_PREFS(textfg) \
  169.     -insertbackground $JEDIT_PREFS(textfg) \
  170.     -selectbackground $JEDIT_PREFS(textsb) \
  171.     -selectforeground $JEDIT_PREFS(textsf) \
  172.     -selectborderwidth $JEDIT_PREFS(textsbw) \
  173.     -borderwidth $JEDIT_PREFS(textbw) \
  174.     -insertwidth $JEDIT_PREFS(textiw) \
  175.     -width $JEDIT_MODEPREFS($mode,textwidth) \
  176.     -height $JEDIT_MODEPREFS($mode,textheight) \
  177.     -wrap $JEDIT_MODEPREFS($mode,textwrap)
  178.   }
  179.   j:configure_font $t $JEDIT_MODEPREFS($mode,textfont) ;# knows about `default'
  180.   # for rich-text:
  181.   jedit:font:configure_fonts $t
  182. }
  183.  
  184. ######################################################################
  185. # various widget-name-guessing procedures
  186. ######################################################################
  187.  
  188. # .jedit1.main.t -> .jedit1
  189.  
  190. proc jedit:text_to_top { t } {
  191.   return [winfo parent [winfo parent $t]]
  192. }
  193.  
  194. # .jedit1.main.t -> .jedit1.main.s
  195.  
  196. proc jedit:text_to_scrollbar { t } {
  197.   return "[winfo parent $t].s"
  198. }
  199.  
  200. # .jedit1.menu -> .jedit1
  201.  
  202. proc jedit:menubar_to_top { mb } {
  203.   return [winfo parent $mb]
  204. }
  205.  
  206. # .jedit -> .jedit, but "." -> ""
  207.  
  208. proc jedit:top_to_prefix { top } {
  209.   if {[string compare "." $top] == 0} {
  210.     return ""
  211.   } else {
  212.     return $top
  213.   }
  214. }
  215.  
  216. # .jedit -> .jedit.main.t, but . -> .main.t
  217.  
  218. proc jedit:top_to_text { top } {
  219.   if {[string compare "." $top] == 0} {
  220.     set prefix ""
  221.   } else {
  222.     set prefix $top
  223.   }
  224.   return ${prefix}.main.t
  225. }
  226.  
  227. # .jedit -> .jedit.buttons, but . -> .buttons
  228.  
  229. proc jedit:top_to_buttonbar { top } {
  230.   if {[string compare "." $top] == 0} {
  231.     set prefix ""
  232.   } else {
  233.     set prefix $top
  234.   }
  235.   return ${prefix}.buttons
  236. }
  237.  
  238. # .jedit -> .jedit.menu, but . -> .menu
  239.  
  240. proc jedit:top_to_menubar { top } {
  241.   if {[string compare "." $top] == 0} {
  242.     set prefix ""
  243.   } else {
  244.     set prefix $top
  245.   }
  246.   return ${prefix}.menu
  247. }
  248.